"""
一个字符串的非空子串是指字符串中长度至少为1
的连续的一段字符组成的串。例如，字符串aaab
有非空子串a, b, aa, ab, aaa, aab, aaab，一共
7个。 注意在计算时，只算本质不同的串的个数。

请问，字符串0100110001010001
有多少个不同的非空子串？

这是一道结果填空的题，你只需要算出结果后提交即可。
本题的结果为一 个整数，在提交答案时只填写这个整数，
填写多余的内容将无法得分。
"""

s = '0100110001010001'
# s = 'aaab'
sep = 1  # 连续的sep个字符的子串
count = 0
set1 = set()  # 空集合，利用集合的不重复性
while sep <= len(s):
    set1.add(s[0:sep])
    for i in range(len(s) - sep):
        set1.add(s[i+1:i+sep+1])  # 集合自动去掉重复的
    sep += 1
    count += len(set1)  # 去重后的个数
    print(set1)
    set1.clear()
print(count)
# {'b', 'a'}
# {'ab', 'aa'}
# {'aab', 'aaa'}
# 7
#
# {'1', '0'}
# {'10', '11', '01', '00'}
# {'110', '000', '010', '100', '001', '011', '101'}
# {'0101', '0110', '0010', '0001', '1100', '1001', '0011', '1010', '1000', '0100'}
# {'00101', '00010', '11000', '01001', '00110', '01010', '01100', '10011', '10001', '01000', '10100'}
# {'010011', '000101', '001100', '001010', '101000', '010100', '100010', '100110', '010001', '011000', '110001'}
# {'0011000', '0101000', '1000101', '0001010', '1010001', '1001100', '0010100', '1100010', '0110001', '0100110'}
# {'00010100', '10011000', '10001010', '00110001', '11000101', '00101000', '01001100', '01100010', '01010001'}
# {'000101000', '011000101', '110001010', '001010001', '010011000', '001100010', '100110001', '100010100'}
# {'1000101000', '0100110001', '1001100010', '0110001010', '0011000101', '1100010100', '0001010001'}
# {'10011000101', '10001010001', '11000101000', '01001100010', '00110001010', '01100010100'}
# {'011000101000', '001100010100', '010011000101', '100110001010', '110001010001'}
# {'0011000101000', '1001100010100', '0100110001010', '0110001010001'}
# {'01001100010100', '10011000101000', '00110001010001'}
# {'010011000101000', '100110001010001'}
# {'0100110001010001'}
# 100

# 直接提交100即可
